/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package BussinesLogic;

import DataAccess.*;
import DataModel.*;
import java.sql.ResultSet;
import java.text.ParseException;
import java.util.*;

public class BL_Arbitro {

    private Dao_Arbitro dao_arbitro;

    public BL_Arbitro() {
        dao_arbitro = new Dao_Arbitro();
    }

    public Request autenticarArbitro(String username, String password) {

        Request rqst = dao_arbitro.consultarArbitro(username,2);
        if (!rqst.getTransac()) return rqst;

        Arbitro arbitro = (Arbitro) rqst.getObject();

        if (!(arbitro.getUsername().equals(username) && arbitro.getPassword().equals(password))) {
            rqst.setTransac(false);
            rqst.setMessage("El nombre de usuario o contraseña son incorrectos");
        }

        return rqst;
    }
    
    public Request registrarArbitro(String id, String nombre, String apellido, String paisNac,
            Date fechaNac, String username, String password){
        
        Request rqst = new Request();
        
        java.text.SimpleDateFormat formato = new java.text.SimpleDateFormat("d-M-yyyy");        
        try {
            fechaNac = formato.parse(formato.format(fechaNac));
        } catch (ParseException ex) {
            rqst.setTransac(false);
            rqst.setMessage(ex.getMessage());
            return rqst;
        }

        Arbitro arbitro = new Arbitro();
        arbitro.setIdentificacion(id);
        arbitro.setNombre(nombre);
        arbitro.setApellido(apellido);
        arbitro.setLugarNac(paisNac);
        arbitro.setFechaNac(fechaNac);
        arbitro.setUsername(username);
        arbitro.setPassword(password);
        
        Dao_Persona dao_persona = new Dao_Persona();
        rqst = dao_persona.registrarPersona(arbitro);
        if(!rqst.getTransac()) return rqst;
        
        rqst = dao_arbitro.registrarArbitro(arbitro);
        if(!rqst.getTransac()){
            dao_persona.eliminarPersona(arbitro);
        }
        
        return rqst;
    }
    
    public Request consultarArbitros(){
        
        Request rqst = dao_arbitro.consultarArbitros();
        if(!rqst.getTransac()) return rqst;
        
        Vector v = (Vector) rqst.getObject();
        Vector vString = new Vector<String>(1,1);
        
        for(int i=0;i<v.size();i++){
            Arbitro a = (Arbitro) v.elementAt(i);
            vString.add(a.getNombre() + " " + a.getApellido());
        }
        rqst.setTransac(true);
        rqst.setObject(vString);
        return rqst;
    }
        
    public Request asignarArbitroCompetencia(String arbitro, String competencia){
        
        Request rqst = new BL_Competencia().consultarCompetencia("nombre",competencia);
        Competencia c = (Competencia) rqst.getObject();
        rqst = new Dao_Persona().consultarPersona("nombre", arbitro.split(" ")[0], "apellido", arbitro.split(" ")[1]);
        Persona p = (Arbitro) rqst.getObject();
        
        //rqst = this.checkHorario(a, c.getFecha(),c.getHora());
        if(!rqst.getTransac()) return rqst;
        
        //rqst = new BL_Arbitro().asignarArbitroCompetencia(arbitro, competencia)

        //System.out.println(a.getNombre());
        //System.out.println(a.getApellido());
        System.out.println(c.getNombre());
        System.out.println(c.getDisciplina().getNombre());
        System.out.println(c.getEscenario().getNombre());
        System.out.println(c.getCantJugFase1());
        System.out.println(c.getHora());
        
        return rqst;
        
    }
   
    private Request checkHorario(Arbitro arbitro, Date fecha, String hora){

        Request rqst = new Request();
        
        int h = Integer.parseInt(hora.split(":")[0]);
        int hInicio = h-3;
        int hFin = h+3;
        String horaInicio="";
        String horaFin = "";
        horaInicio =  hInicio + ":" + hora.split(":")[1];
        horaFin = hFin + ":" + hora.split(":")[1];
        if(hFin>=24) horaFin = "23:59";
        if(hInicio<0) horaInicio = "00:00";
        
        
        rqst = dao_arbitro.consultarDisponibilidad(arbitro, fecha, horaInicio, horaFin);
        if(!rqst.getTransac() || (Integer) rqst.getObject()>0){
            rqst.setTransac(false);
            rqst.setMessage("El arbitro ya tiene asignada una competencia "
                    + "en el horario de la competencia elegida");
        }

        return rqst;
    }
}
